using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    ///
    /// Fecha: 6/4/2013 5:44:39 PM
    /// </summary>
    [Serializable]
    public class ExpedienteAuditoriaLista: ReadOnlyListBase<ExpedienteAuditoriaLista, ExpedienteAuditoriaInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(ExpedienteLicenciamientoLista), "Role");
        }

        #endregion

        #region Factory Methods
        
        public static ExpedienteAuditoriaLista GetExpedienteLista(ExpedienteEstadoCriteria filter)
        {
            return DataPortal.Fetch<ExpedienteAuditoriaLista>(filter);
        }
        public static ExpedienteAuditoriaLista GetExpedienteListaSinAuditoria(ExpedienteCriteria filter)
        {
            return DataPortal.Fetch<ExpedienteAuditoriaLista>(filter);
        }
        private ExpedienteAuditoriaLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(ExpedienteEstadoCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
            {
                new Parametro("ec_codigo", criteria.Codigo),
                new Parametro("ec_nombre", criteria.Nombre),
                new Parametro("ec_prv_id", criteria.ProvinciaId),
                new Parametro("ec_can_id", criteria.CantonId),
                new Parametro("ec_par_id", criteria.ParroquiaId),
                new Parametro("ec_exp_estado", criteria.Estado.Trim()),
                new Parametro("ef_exp_fecha_d", criteria.FechaDesde),
                new Parametro("ef_exp_fecha_a", criteria.FechaHasta)
            };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_AUDITORIAS_CONFIG\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(ExpedienteAuditoriaInfo.GetExpedienteInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        private void DataPortal_Fetch(ExpedienteCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
            {
                new Parametro("ec_codigo", criteria.Codigo),
                new Parametro("ec_nombre", criteria.Nombre),
                new Parametro("ec_prv_id", criteria.ProvinciaId),
                new Parametro("ec_can_id", criteria.CantonId),
                new Parametro("ec_par_id", criteria.ParroquiaId),
               
            };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_EXP_LICEN_SIN_AUD\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(ExpedienteAuditoriaInfo.GetExpedienteInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/4/2013 5:44:39 PM
    /// </summary>
    [Serializable]
    public class ExpedienteAuditoriaInfo : ReadOnlyBase<ExpedienteAuditoriaInfo>
    {
        #region Business Methods      
        public Guid ExpedienteId { get; internal set; }
        public string Nombre { get; internal set; }
        public string Descripcion { get; internal set; }
        public string Codigo { get; internal set; }
        public string Estado { get; internal set; }
        public string Categoria { get; internal set; }
        public int Numero { get; internal set; }
        public string Fase { get; internal set; }
        public string Comunidad { get; internal set; }
        public DateTime FechaCreacion { get; internal set; }
       
        #region Datos Ubicacion

        public string Ubicacion {
            get { return string.Format("{0} - {1} - {2}", Provincia, Canton, Parroquia); } 
        }
        public string Provincia { get; internal set; }
        public string Canton { get; internal set; }
        public string Parroquia { get; internal set; }
        public string Direccion { get; internal set; }
        #endregion

      

        #endregion

        #region Factory Methods

        public static ExpedienteAuditoriaInfo GetExpedienteInfo(string eli_id)
        {
            return DataPortal.FetchChild<ExpedienteAuditoriaInfo>(eli_id);
        }

        internal static ExpedienteAuditoriaInfo GetExpedienteInfo(DataRow childData)
        {
            return DataPortal.FetchChild<ExpedienteAuditoriaInfo>(childData);
        }

        private ExpedienteAuditoriaInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(string eli_id)
        {
            
        }

        private void Child_Fetch(DataRow childData)
        {
            
            ExpedienteId = Guid.Parse(childData["exp_id"].ToString());
            Comunidad = childData["exp_comunidad"].ToString();//
            Codigo = childData["exp_codigo"].ToString();//
            Descripcion = childData["exp_descripcion"].ToString();//
            Categoria = childData["exp_categoria"].ToString();
            Estado = childData["exp_estado"].ToString();
            Numero=Int32.Parse(childData["exp_numero_cat"].ToString());
            FechaCreacion = DateTime.Parse(childData["exp_fecha_creacion"].ToString());           
            Provincia = childData["prv_nombre"].ToString();
            Canton = childData["can_nombre"].ToString();
            Parroquia = childData["par_nombre"].ToString();
            Direccion = childData["exp_direccion"].ToString();
            Nombre = childData["exp_nombre"].ToString();
        }

        #endregion
    }
}
